package com.uniknow.app.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;

import android.widget.EditText;

/** 
 * 字符串操作工具包
 * @author liux (http://my.oschina.net/liux)
 * @version 1.0
 * @created 2012-3-21
 */
public class StringUtils 
{
	private final static Pattern emailer = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
	//private final static SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	//private final static SimpleDateFormat dateFormater2 = new SimpleDateFormat("yyyy-MM-dd");
	
	private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() {
		@Override
		protected SimpleDateFormat initialValue() {
			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		}
	};

	private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() {
		@Override
		protected SimpleDateFormat initialValue() {
			return new SimpleDateFormat("yyyy-MM-dd");
		}
	};
	
	/**
	 * 处理纪元计时后面毫秒数，规范后，去掉毫秒数
	 * @param epoch
	 * @return
	 */
	public static String FormatEpoch(String epoch){
		if(epoch.length()==13){
			epoch = epoch.substring(0, 10);
		}
		return epoch;
	}
	/**
	 * 获取当前时间
	 * @author lianjiao
	 * @date Jan 9, 2014
	 * @return String
	 */
	public static String getCurrentDate(){
		return dateFormater.get().format(new Date());
	}
	/**
	 * 将字符串转位日期类型
	 * @param sdate
	 * @return
	 */
	public static Date toDate(String sdate) {
		try {
			return dateFormater.get().parse(sdate);
		} catch (ParseException e) {
			return null;
		}
	}
	
	/**
	 * 以友好的方式显示时间
	 * @param sdate
	 * @return
	 */
	public static String friendly_time(String sdate) {
		if(isEmpty(sdate)){
			return "";
		}
		Date time = toDate(sdate);
		if(time == null) {
			return "Unknown";
		}
		String ftime = "";
		Calendar cal = Calendar.getInstance();
		
		//判断是否是同一天
		String curDate = dateFormater2.get().format(cal.getTime());
		String paramDate = dateFormater2.get().format(time);
		if(curDate.equals(paramDate)){
			int hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);
			if(hour == 0)
				ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分钟前";
			else 
				ftime = hour+"小时前";
			return ftime;
		}
		
		long lt = time.getTime()/86400000;
		long ct = cal.getTimeInMillis()/86400000;
		int days = (int)(ct - lt);		
		if(days == 0){
			int hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);
			if(hour == 0)
				ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分钟前";
			else 
				ftime = hour+"小时前";
		}
		else if(days == 1){
			ftime = "昨天";
		}
		else if(days == 2){
			ftime = "前天";
		}
		else if(days > 2 && days <= 10){ 
			ftime = days+"天前";			
		}
		else if(days > 10){			
			ftime = dateFormater2.get().format(time);
		}
		return ftime;
	}
	/**
	 * 返回当前时间
	 * @author lianjiao 
	 * @created 2013-12-26
	 * @return string
	 */
	public static String getToday(){
		Calendar cal = Calendar.getInstance();
		String nowDate = dateFormater.get().format(cal.getTime());
		return nowDate;
	}
	/**
	 * 判断给定字符串时间是否为今日
	 * @param sdate
	 * @return boolean
	 */
	public static boolean isToday(String sdate){
		boolean b = false;
		Date time = toDate(sdate);
		Date today = new Date();
		if(time != null){
			String nowDate = dateFormater2.get().format(today);
			String timeDate = dateFormater2.get().format(time);
			if(nowDate.equals(timeDate)){
				b = true;
			}
		}
		return b;
	}
	
	/**
	 * 判断给定字符串是否空白串。
	 * 空白串是指由空格、制表符、回车符、换行符组成的字符串
	 * 若输入字符串为null或空字符串，返回true
	 * @param input
	 * @return boolean
	 */
	public static boolean isEmpty( String input ) 
	{
		if ( input == null || "".equals( input ) )
			return true;
		
		for ( int i = 0; i < input.length(); i++ ) 
		{
			char c = input.charAt( i );
			if ( c != ' ' && c != '\t' && c != '\r' && c != '\n' )
			{
				return false;
			}
		}
		return true;
	}
	
	public static boolean isEmpty( EditText input ) {
		if(null == input){
			return true;
		}else{
			return isEmpty(input.getText().toString());
		}
	}
	
	public static boolean isNotBlank(String str)
	{
		if(str!=null&&!str.equals(""))
		{
			return true;
		}else {
			return false;
		}
	}

	/**
	 * 判断是不是一个合法的电子邮件地址
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email){
		if(email == null || email.trim().length()==0) 
			return false;
	    return emailer.matcher(email).matches();
	}
	/**
	 * 字符串转整数
	 * @param str
	 * @param defValue
	 * @return
	 */
	public static int toInt(String str, int defValue) {
		try{
			return Integer.parseInt(str);
		}catch(Exception e){}
		return defValue;
	}
	/**
	 * 对象转整数
	 * @param obj
	 * @return 转换异常返回 0
	 */
	public static int toInt(Object obj) {
		if(obj==null) return 0;
		return toInt(obj.toString(),0);
	}
	/**
	 * 对象转整数
	 * @param obj
	 * @return 转换异常返回 0
	 */
	public static long toLong(String obj) {
		try{
			return Long.parseLong(obj);
		}catch(Exception e){}
		return 0;
	}
	
	public static String toString(Object obc){
		
		return null;
	}
	/**
	 * 字符串转布尔值
	 * @param b
	 * @return 转换异常返回 false
	 */
	public static boolean toBool(String b) {
		try{
			return Boolean.parseBoolean(b);
		}catch(Exception e){}
		return false;
	}
	/**
	 * 修正tel
	 * @author lianjiao 
	 * @created 2013-12-23
	 * @param tel
	 * @return
	 */
	public static String FixTel(String tel){
		tel = tel.trim();//删除前后空格
		tel.replace(" ", "");
		tel.replace("+86", "");
		if(tel.length()>11&&(tel.substring(0,5).equals("17951")||tel.substring(0,5).equals("17911"))){
			//System.out.println("IFFStringUtil = "+tel+"--");
			tel = tel.substring(5);
		}else{
			//System.out.println("ELSStringUtil = "+tel+"--"+tel.substring(0,5));
		}
		
		return tel;
	}
	
	/** 
	 * 方法名：getCurrentDate
	 * 描述：获取当前时间的描述
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： String   
	 * @创建时间：  2014年6月12日 
	 * @创建者：zhangyao
	 * @变更记录：2014年6月12日上午10:03:11 by
	 */
	public static String getCurrentDate(String datetype){
		return getDateStr2Second(System.currentTimeMillis());
	}
	
	/**
	 * 获取时间描述字符串 显示到 秒数
	 * 格式：yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static String getDateStr2Second(long time){
		if(time<9999999999L){
			time*=1000;
		}
		return dateFormater.get().format(time);
	}
	
	/**
	 * 方法名：isAllNumber
	 * 描述：检测是否为纯数字
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： boolean   
	 * @创建时间：  2014年11月26日 
	 * @创建者：韩创
	 * @变更记录：2014年11月26日下午1:44:07 by
	 */
	public static boolean isAllNumber(String str){
		if(isEmpty(str)){
			return false;
		}
		String reg = "^\\d+$";
		return str.matches(reg);
	}
}
